home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / Ant Movie Catalog 3.5.0.2 / amc_install.exe / {app} / Scripts / Cinematografo (IT).ifs < prev    next >
Text File  |  2005-03-15  |  12KB  |  411 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=Andrea Cristaudo (<link>achris@tiscalinet.it</link>) & Stefano Mora (<link>stefano.mora@libero.it</link>)
  8. Title=Cinematografo.it
  9. Description=Movie importation script for Cinematografo.it
  10. Site=http://www.cinematografo.it
  11. Language=IT
  12. Version=1.03 - 02.03.2005
  13. Requires=3.5.0
  14. Comments= (c) 2003 Andrea Cristaudo (<link>achris@tiscalinet.it</link>)| (c) 2004 Stefano Mora (<link>stefano.mora@libero.it</link>)|
  15. License=This program is free software; you can redistribute it and/or modify it under the  terms of the GNU General Public License as published by the Free Software Foundation;  either version 2 of the License, or (at your option) any later version. |
  16. GetInfo=1
  17.  
  18. [Options]
  19.  
  20. ***************************************************)
  21.  
  22. program Cinematografo;
  23. var
  24.   MovieName: string;
  25.   TheMovieAddress: string;
  26.   idx : integer;
  27.  
  28. const
  29.   PATHLOG = 'c:\Programmi\Ant Movie Catalog\Log\LogsCinematogr\';
  30.   //MOVIE = 'LibroGiungla';
  31.   SITE = 'http://www.cinematografo.it';
  32.   
  33. // -- Formatta la stringa rendendola tutto minuscolo a parte la prima lettera
  34. function PrimaMaiu(str: string): string;
  35. begin
  36.   str := AnsiLowerCase(str);
  37.   Result := AnsiUpFirstLetter(str);
  38. end;
  39.  
  40. // -- Formatta la stringa cercando le prime lettere rendendole maiuscole
  41. function PrimeMaiu(str: string): string;
  42. begin
  43.   str := AnsiLowerCase(str);
  44.   str := AnsiMixedCase(str, ' -/');
  45.   Result := str;
  46. end;
  47.  
  48. // ---
  49.  
  50. function RemoveTabs(Pattern: string): string;
  51. begin
  52.   repeat
  53.     Delete(Pattern, 1, 1);
  54.   until ord(copy(Pattern, 1, 1)) <> 9;
  55.  
  56.   result := Pattern;
  57. end;
  58.  
  59. function Space2html(Url: string): string;
  60. var
  61.   Temp : string;
  62.   SpacePos : Integer;
  63. begin
  64.   repeat
  65.     SpacePos := pos(' ', Url);
  66.     if SpacePos <> 0 then
  67.       begin
  68.         Temp := copy(Url, 1, SpacePos -1);
  69.         Delete(Url, 1, SpacePos);
  70.         Temp := Temp + '%20' + Url;
  71.         Url := Temp;
  72.       end;
  73.   until pos(' ', Url) = 0;
  74.  
  75.   result := Url;
  76. end;
  77.  
  78. // ---
  79.  
  80. function FillInput(Page: TStringList; LineNr: Integer; Salto: Integer; Field: Integer): Integer;
  81. var
  82.   Line: string;
  83. begin
  84.   LineNr := LineNr + Salto;
  85.  
  86.   // Sostituzione <BR>
  87.   if (Field = fieldActors) or (Field=fieldDirector) then
  88.   begin
  89.     Line := StringReplace(Page.GetString(LineNr), '<BR>', ', ');
  90.   end
  91.   else
  92.   begin
  93.     if (Field = fieldCategory) or (Field = fieldCountry) then
  94.     begin
  95.       Line := StringReplace(Page.GetString(LineNr), '<BR>', '/');
  96.     end
  97.     else
  98.     begin
  99.       Line := StringReplace(Page.GetString(LineNr), '<BR>', #13#10);
  100.     end;
  101.   end;
  102.  
  103.   HTMLRemoveTags(Line);
  104.   HTMLDecode(Line);
  105.   Line := Trim(RemoveTabs(Line));
  106.   
  107.   // Correzione maiuscole/minuscole
  108.   if Field = fieldActors then
  109.     begin
  110.     Line := StringReplace(Line, '      ', ' : ');
  111.     Line := PrimeMaiu(Line);
  112.     end
  113.   else if (Field = fieldOriginalTitle) then
  114.     begin
  115.     Line := PrimaMaiu(Line);
  116.     end
  117.   else if (Field = fieldDirector) or (Field = fieldProducer) or (Field = fieldCountry) or (Field = fieldCategory) then Line := PrimeMaiu(Line);
  118.  
  119.   Line := StringReplace(Line, '  ', ' ');
  120.   Line := StringReplace(Line, '  ', ' ');
  121.   SetField(Field, Line);
  122.   Result := LineNr;
  123. end;
  124.  
  125. // ---
  126.  
  127. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  128. var
  129.   i: Integer;
  130. begin
  131.   result := -1;
  132.   if StartAt < 0 then
  133.     StartAt := 0;
  134.   for i := StartAt to List.Count-1 do
  135.     if Pos(Pattern, List.GetString(i)) <> 0 then
  136.     begin
  137.       result := i;
  138.       Break;
  139.     end;
  140. end;
  141.  
  142. // ----
  143.  
  144. procedure AnalyzePage(Address: string);
  145. var
  146.   Page: TStringList;
  147.   LineNr: integer;
  148.   BeginPos: integer;
  149. begin
  150.   Page := TStringList.Create;
  151.   Page.Text := GetPage(Address);
  152.   idx := 0;
  153.  
  154.   // Debug
  155.   //Page.SaveToFile(PATHLOG+MovieName+'.res0');
  156.   //Page.LoadFromFile(PATHLOG+MOVIE+'.res0');
  157.  
  158.   LineNr := FindLine('DELLA RICERCA', Page, 0);
  159.   if LineNr = -1 then
  160.   begin
  161.     LineNr := FindLine('Affina la tua ricerca', Page, 0);
  162.     if LineNr = -1 then
  163.     begin
  164.       SetField(fieldURL, Address);
  165.       AnalyzeMoviePage(Page);
  166.     end
  167.     else
  168.       ShowMessage('Nessun film trovato');
  169.   end
  170.   else  // Trovati film !   Nota: possono esserci + pagine -> non gestito !
  171.   begin
  172.     // Crea la lista di film
  173.     PickTreeClear;
  174.     PickTreeAdd('Risultati ricerca per "' + MovieName + '":', '');
  175.     AddMoviesTitles(Page);
  176.     if PickTreeExec(Address) then
  177.       begin
  178.         SetField(fieldURL, Address);    // Memorizza il campo URL
  179.         Page.Text := GetPage(Address);  // Richiede la pagina del film
  180.         AnalyzeMoviePage(Page);         // Analizza la pagina del film
  181.       end;
  182.   end;
  183.   Page.Free;
  184. end;
  185.  
  186. // ---
  187.  
  188. procedure AnalyzeMoviePage(Page: TStringList);
  189. var
  190.   Fine: Integer;
  191.   Line: string;
  192.   Line2: string;
  193.   LineNr: Integer;
  194.   BeginPos, EndPos: Integer;
  195.   Field: integer;
  196. begin
  197.  
  198.   //Debug
  199.   //Page.SaveToFile(PATHLOG+MovieName+'.film');
  200.  
  201.   Fine := 0;
  202.   LineNr := FindLine('<font color="#ffffff">Titolo Film</font>', Page, 0);
  203.  
  204.   if LineNr > -1 then
  205.   begin
  206.     //Cerca titolo
  207.     LineNr := LineNr + 4;
  208.     Line := Page.GetString(LineNr);
  209.     //ShowMessage(Line);
  210.     
  211.     // Se legge una riga html con ID="Table1" allora titolo e immagine sono in tabella
  212.     if pos('table', Line) = 0 then
  213.       begin
  214.       HTMLRemoveTags(Line);
  215.       Line := RemoveTabs(Line);
  216.       SetField(fieldTranslatedTitle, PrimaMaiu(Line) );
  217.       SetField(fieldOriginalTitle, PrimaMaiu(Line) );
  218.       end
  219.     else  // Titolo + immagine in tabella
  220.       begin
  221.       
  222.       // Titolo
  223.       LineNr := LineNr + 3;
  224.       Line := Page.GetString(LineNr);
  225.       HTMLRemoveTags(Line);
  226.       Line := RemoveTabs(Line);
  227.       // Per il momento Titolo originale = titolo tradotto
  228.       SetField(fieldTranslatedTitle, PrimaMaiu(Line) );
  229.       SetField(fieldOriginalTitle, PrimaMaiu(Line) );
  230.  
  231.       // Immagine
  232.       LineNr := LineNr + 6;
  233.       Line := Page.GetString(LineNr);
  234.       if pos('<img border="0" src="', Line) <> 0 then
  235.         begin
  236.         BeginPos := pos('<img border="0" src="', Line);
  237.         Delete(Line, 1, BeginPos + 20);
  238.         EndPos := pos('" ', Line);
  239.         Line := copy(Line, 1, EndPos - 1);
  240.         Line := StringReplace(Line, ' ', '');
  241.  
  242.         Line := 'http://www.cinematografo.it/bdcm/' + Line;
  243.         Line := Space2html(Line);
  244.         GetPicture(Line);
  245.         end;
  246.       LineNr := LineNr + 4; // Per non leggere il >/table>
  247.       end;
  248.  
  249.     // Loop per gli altri campi
  250.     repeat
  251.       LineNr := LineNr + 1;
  252.       Line := Page.GetString(LineNr);
  253.  
  254.       if pos('<font color="#ffffff">Anno</font>', Line) <> 0 then
  255.         LineNr := FillInput(Page, LineNr, 3, fieldYear)
  256.       else if pos('<font color="#ffffff">Titolo originale</font>', Line) <> 0 then
  257.         LineNr := FillInput(Page, LineNr, 3, fieldOriginalTitle)
  258.       else if pos('<font color="#ffffff">Durata</font>', Line) <> 0 then
  259.         LineNr := FillInput(Page, LineNr, 3, fieldLength)
  260.       else if pos('<font color="#ffffff">Origine</font>', Line) <> 0 then
  261.         LineNr := FillInput(Page, LineNr, 3, fieldCountry)
  262.       else if pos('<font color="#ffffff">Genere</font>', Line) <> 0 then
  263.         LineNr := FillInput(Page, LineNr, 3, fieldCategory)
  264.       else if pos('<font color="#ffffff">Produzione</font>', Line) <> 0 then
  265.         LineNr := FillInput(Page, LineNr, 3, fieldProducer)
  266.       else if pos('<font color="#ffffff">Regia</font>', Line) <> 0 then
  267.         LineNr := FillInput(Page, LineNr, 3, fieldDirector)
  268.       else if pos('<font color="#ffffff">Trama</font>', Line) <> 0 then
  269.         begin
  270.         LineNr := LineNr+3;
  271.         Line := Page.GetString(LineNr);
  272.         HTMLRemoveTags(Line);
  273.         Line := Trim(RemoveTabs(Line));
  274.         LineNr := LineNr+1;
  275.         if Left(Line, 6)='TRAMA ' then  // Trama breve e lunga su + righe
  276.           begin
  277.           Line := Page.GetString(LineNr); // Tengo la trama breve
  278.           LineNr := LineNr+1;
  279.           end
  280.  
  281.         Line2 := Page.GetString(LineNr);  // Event. seconda riga
  282.         HTMLRemoveTags(Line2);
  283.         if trim(Line2)<> '' then Line := Line + Line2;
  284.  
  285.         SetField(fieldDescription, Line);
  286.         end
  287.       else if pos('<font color="#ffffff">Critica</font>', Line) <> 0 then
  288.         LineNr := FillInput(Page, LineNr, 3, fieldComments)
  289.       else if pos('<font color="#ffffff">Attori</font>', Line) <> 0 then
  290.         LineNr := FillInput(Page, LineNr, 3, fieldActors)
  291.       else if pos('<img align="right" border="0"', Line) <> 0 then
  292.         begin
  293.           BeginPos := pos('<img align="right" border="0" src="', Line);
  294.           Delete(Line, 1, BeginPos + 35);
  295.           EndPos := pos('">', Line);
  296.           Line := copy(Line, 1, EndPos - 1);
  297.           Line := 'http://www.cinematografo.it/' + Line;
  298.           Line := Space2html(Line);
  299.           GetPicture(Line);
  300.         end
  301.       else if pos('</table>', Line) <> 0 then
  302.         Fine := 1;
  303.  
  304.     until Fine = 1;
  305.   end;
  306.   
  307.   //DisplayResults;
  308. end;
  309.  
  310. // ---
  311. // Riempie la lista con i film trovati
  312.  
  313. procedure AddMoviesTitles(Page: TStringList);
  314.  
  315. var
  316.   LineNr: Integer;
  317.   Line: string;
  318.   MovieTitle, MovieAddress: string;
  319.   BeginPos, EndPos: Integer;
  320.   Pagina: TStringList;
  321.  
  322. begin
  323.   TheMovieAddress := '*';
  324.   LineNr := 0;
  325.  
  326.   LineNr := FindLine('<a href="bancadati_scheda.asp?sch=',Page,LineNr);
  327.   while LineNr > -1 do
  328.   begin
  329.     Line := Page.GetString(LineNr);
  330.  
  331.     BeginPos := pos('<a href="',Line)+9;  // Punta all'inizio url
  332.     Delete(Line, 1, BeginPos-1);          // Cancella tutti i char precedenti
  333.     
  334.     BeginPos := 1;            // Nuovo inizio
  335.     EndPos := pos('">',Line); // Fine url
  336.  
  337.     // Crea l'url per il film
  338.     MovieAddress := SITE + '/bdcm/' + copy(Line,BeginPos,EndPos-BeginPos);
  339.     
  340.     // Riga successiva = titolo trovato
  341.     LineNr := LineNr + 1;
  342.     Line := Page.GetString(LineNr);
  343.     MovieTitle := AnsiUpFirstLetter(Line);
  344.     // Ripulisce il titolo
  345.     HTMLRemoveTags(MovieTitle);
  346.     HTMLDecode(MovieTitle);
  347.     MovieTitle := RemoveTabs(MovieTitle);
  348.  
  349.     // Cerca l'anno del film
  350.     LineNr := LineNr + 3;
  351.     Line := Page.GetString(LineNr);
  352.     HTMLRemoveTags(Line);
  353.     Line := RemoveTabs(Line);
  354.     Line := StringReplace( Line, ' ', '');
  355.     Line := StringReplace( Line, '-', '');
  356.  
  357.     // Costruisce la riga con titolo + anno e mette in lista
  358.     MovieTitle := MovieTitle + ' (' + Line + ')';
  359.     PickTreeAdd(MovieTitle, MovieAddress);
  360.     
  361.     // Prossimo film in lista ...
  362.     LineNr := FindLine('<a href="bancadati_scheda.asp?sch=',Page,LineNr+1);
  363.  
  364.   end;  // while
  365.   
  366.   // Controlla se ci sono altre pagine di risultati
  367.   LineNr := FindLine('Succ.',Page,LineNr);
  368.   if LineNr<>-1 then
  369.     begin
  370.     idx := idx+1;
  371.     // PickTreeAdd('Ci sono altre pagine ...'+IntToStr(idx), '');
  372.     // LineNr := FindLine('Succ.',Page,LineNr);
  373.     
  374.     Line := Page.GetString(LineNr);
  375.     // Estrae l'URL della pagina successiva
  376.     BeginPos := pos('href="', Line)+6;
  377.     EndPos := pos('">', Line);
  378.     Line := SITE + copy(Line, BeginPos, endPos-BeginPos);
  379.     // Richiama la pagina successiva e la analizza
  380.     Pagina := TStringList.Create;
  381.     Pagina.Text := GetPage(Line);
  382.  
  383.     // Debug
  384.     //Page.SaveToFile(PATHLOG+MovieName+'.res'+IntToStr(idx));
  385.     //Page.LoadFromFile(PATHLOG+MOVIE+'.res');
  386.  
  387.     AddMoviesTitles(Pagina);
  388.     Pagina.Free;
  389.     end;
  390. end;
  391.  
  392.  
  393. // ----- main()
  394.  
  395. Var
  396.   TempVar: String;
  397. begin
  398.   if CheckVersion(3,5,0) then
  399.   begin
  400.     MovieName := GetField(fieldOriginalTitle);
  401.     if MovieName = '' then
  402.       MovieName := GetField(fieldTranslatedTitle);
  403.     if Input('Cinematografo.it', 'Inserire il nome del film:', MovieName) then
  404.     begin
  405.       TempVar := 'http://www.cinematografo.it/bdcm/bancadati_query.asp?fi='+UrlEncode(MovieName)+'&R1=TI&image1.x=24&image1.y=24';
  406.       analyzepage(TempVar);
  407.     end;
  408.   end else
  409.   ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
  410. end.
  411.